//1.作用域
//全局作用域,js文件中定义的变量
  //console.log(test)//undefined
  //console.log(test2);//错误
  //var test=1;
  //test2=3;
//使用var 定义变量，具有变量提升的功能
//变量提升，js引擎在解析文件之前，检查一下定义了哪些变量，不会出现为定义错误！
var a=1,b=3;
//函数也具有变量提升的功能
c=add();
console.log(c);
//局部作用域

function add(){
    return a+b
}
c=add();
console.log(c);
//在相同的作用域中，定义两个相同的变量或者函数，定义后会取代之前定义的变量或者函数
function add(){
    return 2*(a+b);
}
//2.局部作用域，在函数或者块中定义的变量，是局部作用域
//在块中用let定义的变量为局部作用域；使用var，或者没有var 或者let定义的变量是全局作用域
//{
    //var d=10;//(可以不带var)     
//}
//console.log(d);
//for(let i=0;i<10;i++){

//}
//console.log(i);

//在函数中使用let或者var定义的变量是局部变量，不适用var|let定义的变量是全局变量
function sub(){ //函数中var定义的变量是局部作用域
    var e=10;
    let f=20;
    g=30;
}
sub();
//console.log(e);
//console.log(f);
console.log(g);


//如果全局变量与局部变量重名，哪个变量起作用？（局部变量起作用）--强龙不压地头蛇
function add2(){
     a=30;
    console.log("在函数add2内部定义的变量a=",a);
}
add2();
console.log("全局变量a=",a);
//在函数内部也具有变量提升的功能
function add3(){
    console.log(b);
    var b;   //作用域可以继承，在全局作用域中定义一个局部作用域，局部作用域继承了全局作用域的所有变量。
}
add3();